﻿using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Transactions;
using System.Data.SqlClient;
using System.Data;

namespace WebService1
{
    /// <summary>
    /// Summary description for Servico
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class Servico : System.Web.Services.WebService
    {
        /*
                [WebMethod] // Tem que ser public
                public string HelloWorld()
                {
                    return "Hello World";
            
                }
        */
        [WebMethod] // Retorna um array de clientes 
        public Cliente[] GetClientes()
        {

            // Declara um alista e coloca todos os clientes nela.
            // Nos final converte a lista para Array e retorna-a.
            List<Cliente> list = new List<Cliente>();

            Cliente cli = new Cliente();
            cli.idCliente = 1;
            cli.Nome = "Ewerton";
            cli.Telefone = "9937-3797";
            list.Add(cli);

            cli = new Cliente();
            cli.idCliente = 2;
            cli.Nome = "Tessaro";
            cli.Telefone = "1234-1234";
            list.Add(cli);

            cli = new Cliente();
            cli.idCliente = 3;
            cli.Nome = "Cezar";
            cli.Telefone = "1234-1234";
            list.Add(cli);

            return list.ToArray();

        }



        [WebMethod]
        public void ExemploTransactionScope()
        {

            // System.Transaction. Usado para casos onde precisa salvar a NF e os Itens.
            // Não da pra salvar os itens sem ter a NF. Nesse caso abre uma transaction e depois commita ela.
            // Uma uma transactio a nivel de objeto mas que integra-se com o banco.

            // Pode ser usado para dois bancos também. Se não salvar no primeiro não salva no segundo
            using (TransactionScope ts = new TransactionScope())
            {

                // executa a primeira instrução
                SqlConnection cnt = new SqlConnection("Data Source=localhost;Initial Catalog=OrdServ;Integrated Security=True");
                try
                {
                    cnt.Open();
                    SqlCommand cmd = new SqlCommand("update cidade set uf = 'SC' where idcidade = 1", cnt);
                    cmd.ExecuteNonQuery();
                }
                finally
                {
                    cnt.Close();
                }

                // Executa a segunda instrução
                SqlConnection cnt2 = new SqlConnection("Data Source=localhost;Initial Catalog=OrdServ;Integrated Security=True");
                try
                {
                    cnt2.Open();
                    SqlCommand cmd = new SqlCommand("update ERRO_PROPOSITAL_cidade set uf = 'SC' where idcidade = 2", cnt2);
                    cmd.ExecuteNonQuery();
                }
                finally
                {
                    cnt2.Close();
                }

                // Na segunda instrução vai dar erro.
                // Olhe no banco e veja que nem a primeira foi commmitada

                ts.Complete();

            }

        }

    }
}
